var express = require('express');
var router = express.Router();

// 返回一个构造函数，该构造函数中有静态方法也有对象方法等，通过这些方法我们可以操作数据库
var User = require('../models/User');

// 统一的返回格式
var responseData;

router.use( function(req, res, next){
    responseData = { 
        code: 0,
        message: '',
    }
    next();
} )

/** 
 * 用户注册
 * 注册逻辑
 *  1.用户名不能为空
 *  2.密码不能为空
 *  3.两次密码验证是否一致
 *  
 *  数据库查询
 *  用户名是否已经被注册了
 */
router.post('/user/register', function(req, res, next){
    // res.send('API-User');
    // console.log(req.body);

    var username = req.body.username;
    var password = req.body.password;
    var repassword = req.body.repassword;

    // 判断用户是否为空
    if( username === '' ){
        responseData.code = 1;
        responseData.message = '用户名不能为空';
        res.json(responseData);
        return;
    }

    // 判断密码是否为空
    if( password === '' ){
        responseData.code = 2;
        responseData.message = '密码不能为空';
        res.json(responseData);
        return;
    }

    // 两次输入的密码必须一致
    if( password !== repassword ){
        responseData.code = 3;
        responseData.message = '两次密码不一致';
        res.json(responseData);
        return;
    }

    // 用户名是否已经被注册了，如果数据库中已经存在和我们要注册的用户名同名的数据，表示该用户已经被注册了
    User.findOne({
        username: username
    })
    .then(function(userInfo){
        // console.log(userInfo);
        if(userInfo){
            // 表示数据库中有该记录
            responseData.code = 4;
            responseData.message = '用户名已经被注册了';
            res.json(responseData);
            return;
        }
        // 保存用户名注册的信息到数据库中
        var user = new User({
            username: username,
            password: password
        });
        return user.save();
    })
    .then(function(newUserInfo){
        // console.log(newUserInfo);
        responseData.message = '注册成功';
        res.json(responseData);
    })

})

router.post('/user/login', function(req, res, next){
    var username = req.body.username;
    var password = req.body.password;

    if(username === '' || password === ''){
        responseData.code = 1;
        responseData.message = '用户名或密码不能为空';
        res.json(responseData);
        return;
    }

    // 查询数据库中相同用户名和密码的记录是否存在。如果存在则登录成功
    User.findOne({
        username: username,
        password: password
    })
    .then(function(userInfo){
        if(!userInfo){
            responseData.code = 2;
            responseData.message = '用户名或密码错误';
            res.json(responseData);
            return;
        }
        // 用户名和密码正确
        responseData.message = '登录成功';
        responseData.userInfo = {
            _id: userInfo._id,
            username: userInfo.username
        }
        req.cookies.set('userInfo', JSON.stringify({
            _id: userInfo._id,
            username: userInfo.username
        }));
        res.json(responseData);
        return;
    })
})

/**
 * 退出登录
 */
router.get('/user/logout', function(req, res, next){
    req.cookies.set('userInfo', null);
    res.json(responseData);
})

module.exports = router;